async function getServerSideProps(context) {
const res = await fetch('http://localhost:3000/api' + context.resolvedUrl);
const data = await res.json();
return { props: { data } };
}
function MainContentContainer(props) {
return (
<div>
{props.children}
</div>
);
}
function BreadCrumbTrail(props) {
const pathArray = props.pathArray;
const recursion = (acc) => {
if (acc.length === pathArray.length) {
return acc;
} else {
const subArray = pathArray.slice(0, acc.length + 1);
const breadCrumb = {
name: pathArray[acc.length],
href: '/' + subArray.join('/'),
};
const newAcc = acc.concat([breadCrumb]);
return recursion(newAcc);
}
};
const breadCrumbs = recursion([]);
return (
<div>
{breadCrumbs.map((breadCrumb) => (
<el>/ <a href={breadCrumb.href}>{breadCrumb.name}</a> </el>
))}
</div>
);
}
function PageSubstance(props) {
const data = props.data;
switch (data.resultType) {
case 'treeContents':
const treeContents = data.resultContent.trees.concat(data.resultContent.blobs);
return (
<div>
<BreadCrumbTrail pathArray={data.resultPath} />
<MainContentContainer>
<ul>
{treeContents.map((item) => (
<li><a href={'/' + data.resultPath.join('/') + '/' + item}>{item}</a></li>
))}
</ul>
</MainContentContainer>
</div>
);
break;
case 'textBlob':
return (
<div>
<BreadCrumbTrail pathArray={data.resultPath} />
<MainContentContainer>
{data.resultContent}
</MainContentContainer>
</div>
);
break;
case 'binaryBlob':
return (
<div>
<BreadCrumbTrail pathArray={data.resultPath} />
<p>Binary content cannot be displayed.</p>
</div>
);
break;
case 'error':
return (
<div>
<h1>Error:</h1>
{data.resultContent}
</div>
);
break;
}
}
function Main({ data }) {
return (
<div>
<header className="h-48 bg-slate-200"></header>
<main>
<div className="container mx-auto">
<PageSubstance data={data} />
</div>
</main>
<footer></footer>
</div>
);
}
export { getServerSideProps };
export default Main;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115